#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
初始化扩展功能数据
包括成就、积分商城商品、论坛示例数据等
"""

from app import app, db, Achievement, PointsShopItem, ForumPost, User
import datetime

def init_achievements():
    """初始化成就数据"""
    achievements = [
        {
            'name': '初来乍到',
            'description': '完成第一次垃圾识别',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/1828/1828884.png',
            'condition_type': 'prediction_count',
            'condition_value': 1,
            'points_reward': 20
        },
        {
            'name': '识别新手',
            'description': '完成10次垃圾识别',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936719.png',
            'condition_type': 'prediction_count',
            'condition_value': 10,
            'points_reward': 50
        },
        {
            'name': '分类达人',
            'description': '完成50次垃圾识别',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135715.png',
            'condition_type': 'prediction_count',
            'condition_value': 50,
            'points_reward': 100
        },
        {
            'name': '环保专家',
            'description': '完成100次垃圾识别',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936760.png',
            'condition_type': 'prediction_count',
            'condition_value': 100,
            'points_reward': 200
        },
        {
            'name': '识别王者',
            'description': '完成500次垃圾识别',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135789.png',
            'condition_type': 'prediction_count',
            'condition_value': 500,
            'points_reward': 500
        },
        {
            'name': '坚持不懈',
            'description': '连续使用7天',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/1828/1828970.png',
            'condition_type': 'consecutive_days',
            'condition_value': 7,
            'points_reward': 100
        },
        {
            'name': '习惯养成',
            'description': '连续使用30天',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936684.png',
            'condition_type': 'consecutive_days',
            'condition_value': 30,
            'points_reward': 300
        },
        {
            'name': '精准识别',
            'description': '识别准确率达到90%',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135706.png',
            'condition_type': 'accuracy_rate',
            'condition_value': 90,  # 90%
            'points_reward': 150
        },
        {
            'name': '完美主义',
            'description': '识别准确率达到95%',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936747.png',
            'condition_type': 'accuracy_rate',
            'condition_value': 95,  # 95%
            'points_reward': 250
        }
    ]
    
    for achievement_data in achievements:
        existing = Achievement.query.filter_by(name=achievement_data['name']).first()
        if not existing:
            achievement = Achievement(**achievement_data)
            db.session.add(achievement)
    
    db.session.commit()
    print(f"已初始化 {len(achievements)} 个成就")

def init_points_shop_items():
    """初始化积分商城商品"""
    items = [
        # 环保小贴士类商品 (50-100积分)
        {
            'name': '环保小贴士：塑料回收',
            'description': '学习塑料制品的正确回收方法',
            'points_cost': 50,
            'item_type': 'tip',
            'stock': -1,
            'content': '''塑料回收小贴士：
1. 清洗干净：回收前请清洗塑料容器，去除食物残渣
2. 查看标识：注意塑料底部的回收标识数字
3. 分类投放：不同类型的塑料需要分别投放
4. 避免混合：不要将不同材质的塑料混在一起
5. 压扁处理：大型塑料容器可以压扁节省空间''',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936651.png'
        },
        {
            'name': '环保小贴士：纸张回收',
            'description': '了解纸张回收的注意事项',
            'points_cost': 50,
            'item_type': 'tip',
            'stock': -1,
            'content': '''纸张回收小贴士：
1. 保持干燥：湿润的纸张无法回收
2. 去除杂质：撕掉胶带、订书钉等非纸质材料
3. 分类收集：报纸、杂志、办公用纸分开收集
4. 避免污染：油污、食物残渣会影响回收质量
5. 压实打包：整齐堆放，便于运输处理''',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936652.png'
        },
        {
            'name': '环保小贴士：厨余垃圾处理',
            'description': '学习厨余垃圾的正确处理方法',
            'points_cost': 50,
            'item_type': 'tip',
            'stock': -1,
            'content': '''厨余垃圾处理小贴士：
1. 沥干水分：减少厨余垃圾的水分含量
2. 分类投放：果皮、菜叶、剩饭剩菜分类处理
3. 避免包装：不要连同塑料袋一起投放
4. 家庭堆肥：有条件的可以进行家庭堆肥
5. 定期清理：及时清理，避免异味和细菌滋生''',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936653.png'
        },
        {
            'name': '环保小贴士：电子垃圾',
            'description': '了解电子产品的回收处理',
            'points_cost': 75,
            'item_type': 'tip',
            'stock': -1,
            'content': '''电子垃圾处理小贴士：
1. 专门回收：电子产品需要送到专门的回收点
2. 数据清除：回收前请清除个人数据
3. 电池分离：将电池单独取出回收
4. 完整回收：尽量保持电子产品的完整性
5. 正规渠道：选择有资质的回收机构''',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936654.png'
        },
        {
            'name': '环保小贴士：节能减排',
            'description': '日常生活中的节能减排技巧',
            'points_cost': 60,
            'item_type': 'tip',
            'stock': -1,
            'content': '''节能减排小贴士：
1. 随手关灯：离开房间时关闭不必要的照明
2. 合理调温：空调温度设置在26°C左右
3. 节约用水：洗手、刷牙时及时关闭水龙头
4. 绿色出行：优先选择步行、骑行或公共交通
5. 减少待机：电器不用时完全断电''',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936656.png'
        },
        {
            'name': '绿色生活指南',
            'description': '全面的环保生活建议',
            'points_cost': 100,
            'item_type': 'tip',
            'stock': -1,
            'content': '''绿色生活指南：
1. 减少使用：优先考虑减少消费
2. 重复利用：发挥物品的多重价值
3. 回收再生：正确分类投放垃圾
4. 节能减排：选择环保的生活方式
5. 绿色出行：多使用公共交通工具
6. 节约用水：养成节水的好习惯
7. 绿色消费：选择环保产品''',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936655.png'
        },
        
        # 徽章类商品 (100-500积分)
        {
            'name': '环保新手徽章',
            'description': '环保之路的第一步',
            'points_cost': 100,
            'item_type': 'badge',
            'stock': -1,
            'content': '恭喜获得环保新手徽章！欢迎加入环保大家庭，让我们一起为地球贡献力量！',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135714.png'
        },
        {
            'name': '环保达人徽章',
            'description': '展示你的环保意识',
            'points_cost': 200,
            'item_type': 'badge',
            'stock': -1,
            'content': '恭喜获得环保达人徽章！这是对你环保行为的认可。',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135715.png'
        },
        {
            'name': '分类专家徽章',
            'description': '垃圾分类专业认证',
            'points_cost': 300,
            'item_type': 'badge',
            'stock': -1,
            'content': '恭喜获得分类专家徽章！你已经掌握了垃圾分类的精髓。',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/2936/2936760.png'
        },
        {
            'name': '环保大师徽章',
            'description': '最高级别的环保认证',
            'points_cost': 500,
            'item_type': 'badge',
            'stock': -1,
            'content': '恭喜获得环保大师徽章！你是真正的环保践行者。',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135789.png'
        },
        
        # 虚拟奖品类商品 (150-800积分)
        {
            'name': '环保主题头像框',
            'description': '绿色清新的个人头像装饰',
            'points_cost': 150,
            'item_type': 'virtual',
            'stock': -1,
            'content': '获得专属环保主题头像框，让你的头像更加绿色清新！',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135716.png'
        },
        {
            'name': '个性化环保昵称',
            'description': '专属的环保主题昵称后缀',
            'points_cost': 200,
            'item_type': 'virtual',
            'stock': -1,
            'content': '获得环保主题昵称后缀，如"环保小卫士"、"绿色达人"等，展示你的环保身份！',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135717.png'
        },
        {
            'name': '环保知识电子书',
            'description': '详细的环保知识合集',
            'points_cost': 250,
            'item_type': 'virtual',
            'stock': 50,
            'content': '包含垃圾分类、节能减排、绿色生活等全方位环保知识的电子书，助你成为环保专家！',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135718.png'
        },
        {
            'name': '环保积分加速卡',
            'description': '7天内积分获取翻倍',
            'points_cost': 300,
            'item_type': 'virtual',
            'stock': 20,
            'content': '使用后7天内所有环保行为获得的积分翻倍！让你更快达成环保目标。',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135719.png'
        },
        {
            'name': '专属环保称号',
            'description': '"地球守护者"专属称号',
            'points_cost': 400,
            'item_type': 'virtual',
            'stock': 10,
            'content': '获得"地球守护者"专属称号，在社区中展示你的环保贡献！',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135720.png'
        },
        {
            'name': '环保VIP会员',
            'description': '30天VIP特权体验',
            'points_cost': 600,
            'item_type': 'virtual',
            'stock': 5,
            'content': '30天VIP会员特权：优先客服支持、专属活动参与、额外积分奖励等！',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135721.png'
        },
        {
            'name': '环保年度大奖',
            'description': '年度环保贡献者专属奖励',
            'points_cost': 800,
            'item_type': 'virtual',
            'stock': 3,
            'content': '年度环保贡献者专属奖励包：包含所有徽章、称号、特权和纪念品！',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135722.png'
        },
        
        # 限时特惠商品
        {
            'name': '新手福利包',
            'description': '新用户专享优惠套餐',
            'points_cost': 80,
            'item_type': 'virtual',
            'stock': 100,
            'content': '新手福利包包含：环保小贴士3份 + 环保新手徽章 + 积分加成卡，超值优惠！',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135723.png'
        },
        {
            'name': '环保周边礼品',
            'description': '实体环保主题小礼品',
            'points_cost': 1000,
            'item_type': 'physical',
            'stock': 0,  # 暂时缺货
            'is_available': False,
            'content': '环保主题实体礼品：可重复使用购物袋、竹制餐具套装、环保笔记本等。',
            'icon_url': 'https://cdn-icons-png.flaticon.com/512/3135/3135724.png'
        }
    ]
    
    for item_data in items:
        existing = PointsShopItem.query.filter_by(name=item_data['name']).first()
        if not existing:
            item = PointsShopItem(**item_data)
            db.session.add(item)
    
    db.session.commit()
    print(f"已初始化 {len(items)} 个积分商城商品")

def init_forum_posts():
    """初始化论坛示例帖子"""
    # 获取管理员用户
    admin_user = User.query.filter_by(role='admin').first()
    if not admin_user:
        print("未找到管理员用户，跳过论坛帖子初始化")
        return
    
    posts = [
        {
            'title': '欢迎来到环保社区！',
            'content': '''欢迎大家来到我们的环保社区！

这里是一个分享环保心得、交流垃圾分类经验的平台。希望大家能够：

1. 分享你的环保小贴士
2. 讨论垃圾分类的疑问
3. 展示你的环保成果
4. 互相学习，共同进步

让我们一起为地球环保事业贡献力量！''',
            'category': 'general',
            'author_id': admin_user.id,
            'is_pinned': True
        },
        {
            'title': '垃圾分类常见问题解答',
            'content': '''整理了一些垃圾分类的常见问题：

**Q: 湿纸巾属于什么垃圾？**
A: 湿纸巾属于其他垃圾，不是可回收物。

**Q: 过期药品怎么处理？**
A: 过期药品属于有害垃圾，需要专门回收。

**Q: 外卖盒能回收吗？**
A: 清洗干净的塑料外卖盒可以回收，但有油污的不行。

大家还有什么问题可以在下面留言讨论！''',
            'category': 'qa',
            'author_id': admin_user.id,
            'is_pinned': True
        },
        {
            'title': '我的环保生活小妙招',
            'content': '''分享几个我在日常生活中的环保小妙招：

1. **购物袋重复使用**：每次出门都带上环保购物袋
2. **废物利用**：用完的玻璃瓶可以当花瓶
3. **节约用水**：洗菜水可以用来浇花
4. **垃圾分类**：在家里准备不同的垃圾桶
5. **绿色出行**：短距离尽量步行或骑自行车

大家也来分享你们的环保妙招吧！''',
            'category': 'tips',
            'author_id': admin_user.id
        },
        {
            'title': '如何提高垃圾分类的准确率？',
            'content': '''想要提高垃圾分类的准确率，我觉得可以从以下几个方面入手：

1. **学习分类知识**：多了解各种垃圾的分类标准
2. **观察物品材质**：仔细看包装上的材质说明
3. **使用识别工具**：像我们这个APP就很好用
4. **实践练习**：多练习，熟能生巧
5. **请教他人**：不确定时可以问问有经验的人

大家还有什么好方法吗？''',
            'category': 'tips',
            'author_id': admin_user.id
        }
    ]
    
    for post_data in posts:
        existing = ForumPost.query.filter_by(title=post_data['title']).first()
        if not existing:
            post = ForumPost(**post_data)
            db.session.add(post)
    
    db.session.commit()
    print(f"已初始化 {len(posts)} 个论坛帖子")

def main():
    """主函数"""
    with app.app_context():
        print("开始初始化扩展功能数据...")
        
        # 创建所有表
        db.create_all()
        
        # 初始化各种数据
        init_achievements()
        init_points_shop_items()
        init_forum_posts()
        
        print("扩展功能数据初始化完成！")

if __name__ == '__main__':
    main()